Load Packages

For our analysis, in addition to the state-wise data package, we will use the following packages for data wrangling and visualization.

library(devtools)
library(tidyverse)
library(sf)
library(tidycensus)
library(tmap)
library(censusr)
library(here)
library(janitor)
library(lubridate)

Load Data

The data comes from a data set posted by Open Data DC from their own website that consists of all the crime data for past years. The data can be downloaded in .csv, .geojson and various other formats. The data is available at (“https://opendata.dc.gov/datasets/crime-incidents-in-2021/explore”) and is updated daily.

The datasets for census data and the crime data were joined together using

df = st_join(crime, neigh)

T-map for crimes in neighborhood

The tmap code below has been set to view mode. Each neighborhood has been represented by a a different shade and been filled with the area. The black dots represents any crime that has happened in that particular area.

tmap_mode("view")
tmap mode set to interactive viewing
tm_shape(neigh) + 
  tm_polygons("shapearea") +
tm_shape(crime) + 
  tm_dots(col="offense", palette = "Set1", stretch.palette = FALSE, size = 0.02, shape = 2) +  
  tm_layout(legend.outside = TRUE) 
Symbol shapes other than circles or icons are not supported in view mode.

Making Visualizations from the Data

The crime data from Open Data DC is from Jan 1, 2021 till Dec 8, 2021. We used some of the variables from the dataset to create plots that could give us certain visualizations about crime happening in DC.

Time of the day

The ggplot shows us visualizations for crime by time of day.

ggplot(crime, aes(fct_infreq(shift))) +
  geom_bar() +
  labs(
    x="Time of Day",
    y="Number of Crimes Reported")+
  theme(legend.position = "none")

Method

The ggplot shows us visualizations for crime by method.

ggplot(crime, aes(x=fct_infreq(method))) +
  geom_bar() +
  labs(
    x="Method of Crime",
    y="Number of Crimes Reported",
    fill="Method") +
  scale_y_continuous(labels = scales::comma)+
  theme(legend.position = "none")

Offense

ggplot code below shows the number of crimes by offense. In the plot below, we see that there are no records for Arson related crimes. However, that is because the crimes related to Arson very less (3) compared to that of Theft/Other (10236).

ggplot(crime, aes(x=fct_infreq(offense), fill=offense)) +
  geom_bar(stat='count') +
  labs(
    x="Criminal Offense",
    y="Number of Crimes Reported",
    fill="Offense") +
    theme(axis.text.x = element_text(angle = 30, hjust=1)) +
    theme(legend.position = "none")

Total Crimes (by month)

  • Data for December is incomplete.
ggplot(crime, aes(factor(month(report_dat, label=TRUE)))) +
  geom_bar() +
  labs(
    x="Year",
    y="Number of Crimes Reported") +
    theme(legend.position = "none")

LS0tDQp0aXRsZTogIkNyaW1lIERhdGEgQW5hbHlzaXMiDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQojIyMgTG9hZCBQYWNrYWdlcw0KDQpGb3Igb3VyIGFuYWx5c2lzLCBpbiBhZGRpdGlvbiB0byB0aGUgc3RhdGUtd2lzZSBkYXRhIHBhY2thZ2UsIHdlIHdpbGwgdXNlIHRoZSBmb2xsb3dpbmcgcGFja2FnZXMgZm9yIGRhdGEgd3JhbmdsaW5nIGFuZCB2aXN1YWxpemF0aW9uLg0KDQotICoqZGV2dG9vbHMqKiBmb3IgUiBwYWNrYWdlIGRldmVsb3BtZW50DQotICoqdGlkeXZlcnNlKiogZm9yIGRhdGEgd3JhbmdsaW5nIGFuZCB2aXN1YWxpemF0aW9uDQotICoqc2YqKiB0byBjb252ZXJ0IGNvb3JkaW5hdGVzIGludG8gZ2VvbWV0cmljYWwgcG9pbnRzDQotICoqdGlkeWNlbnN1cyoqIHRvIGdldCBDZW5zdXMgZGF0YSB0aGF0IGlzIHByZS1wcmVwYXJlZCBmb3IgZXhwbG9yYXRpb24gd2l0aGluIHRoZSB0aWR5dmVyc2UNCi0gKip0bWFwKiogdG8gdmlzdWFsaXplIHNwYXRpYWwgZGF0YSBkaXN0cmlidXRpb25zIGJ5IGNyZWF0aW5nIGdlb2dyYXBoaWNhbCBtYXBzIGJ5IHZhcmlhYmxlcw0KLSAqKmNlbnN1c3IqKiB0byByZXRyaWV2ZSBkYXRhIGZyYW1lcyBvZiBjZW5zdXMgZGF0YSBhbmQgbWV0YWRhdGEgZnJvbSBVLlMuIENlbnN1cyBCZXVyZWF1DQotICoqaGVyZSoqIHRvIHNwZWNpZnkgd2hlcmUgZmlsZXMvZGF0YSBpcyBpbiB0aGUgY29tcHV0ZXIgcmVsYXRpdmUgdG8gYSBwYXJ0aWN1bGFyIGZpbGUgDQotICoqamFuaXRvcioqIGZvciBleGFtaW5pbmcgYW5kIGNsZWFuaW5nIHVudGlkeSBkYXRhDQotICoqbHVicmlkYXRlKiogcGFja2FnZSBmb3IgaGFuZGxpbmcgZGF0ZXMNCg0KYGBge3J9DQpsaWJyYXJ5KGRldnRvb2xzKQ0KbGlicmFyeSh0aWR5dmVyc2UpDQpsaWJyYXJ5KHNmKQ0KbGlicmFyeSh0aWR5Y2Vuc3VzKQ0KbGlicmFyeSh0bWFwKQ0KbGlicmFyeShjZW5zdXNyKQ0KbGlicmFyeShoZXJlKQ0KbGlicmFyeShqYW5pdG9yKQ0KbGlicmFyeShsdWJyaWRhdGUpDQpgYGANCg0KIyMjIExvYWQgRGF0YQ0KDQpUaGUgZGF0YSBjb21lcyBmcm9tIGEgZGF0YSBzZXQgcG9zdGVkIGJ5IE9wZW4gRGF0YSBEQyBmcm9tIHRoZWlyIG93biB3ZWJzaXRlIHRoYXQgY29uc2lzdHMgb2YgYWxsIHRoZSBjcmltZSBkYXRhIGZvciBwYXN0IHllYXJzLiBUaGUgZGF0YSBjYW4gYmUgZG93bmxvYWRlZCBpbiAuY3N2LCAuZ2VvanNvbiBhbmQgdmFyaW91cyBvdGhlciBmb3JtYXRzLiBUaGUgZGF0YSBpcyBhdmFpbGFibGUgYXQgKCJodHRwczovL29wZW5kYXRhLmRjLmdvdi9kYXRhc2V0cy9jcmltZS1pbmNpZGVudHMtaW4tMjAyMS9leHBsb3JlIikgYW5kIGlzIHVwZGF0ZWQgZGFpbHkuDQoNCmBgYHtyLCBpbmNsdWRlID0gRkFMU0V9DQpjcmltZSA8LSBzdF9yZWFkKA0KICBoZXJlKCJkYXRhIiwgInJhdyIsIkNyaW1lX0luY2lkZW50c19pbl8yMDIxLmdlb2pzb24iKSkgJT4lIGNsZWFuX25hbWVzKCkNCg0KbmVpZ2ggPSBzdF9yZWFkKA0KICBoZXJlKCJkYXRhIiwgInJhdyIsImRjX25laWdoLmdlb2pzb24iKSkgJT4lIGNsZWFuX25hbWVzKCkNCmBgYA0KDQpUaGUgZGF0YXNldHMgZm9yIGNlbnN1cyBkYXRhIGFuZCB0aGUgY3JpbWUgZGF0YSB3ZXJlIGpvaW5lZCB0b2dldGhlciB1c2luZw0KDQpgYGB7cn0NCmRmID0gc3Rfam9pbihjcmltZSwgbmVpZ2gpDQpgYGANCg0KIyMjIFQtbWFwIGZvciBjcmltZXMgaW4gbmVpZ2hib3Job29kDQoNClRoZSB0bWFwIGNvZGUgYmVsb3cgaGFzIGJlZW4gc2V0IHRvIHZpZXcgbW9kZS4gRWFjaCBuZWlnaGJvcmhvb2QgaGFzIGJlZW4gcmVwcmVzZW50ZWQgYnkgYSBhIGRpZmZlcmVudCBzaGFkZSBhbmQgYmVlbiBmaWxsZWQgd2l0aCB0aGUgYXJlYS4gVGhlIGJsYWNrIGRvdHMgcmVwcmVzZW50cyBhbnkgY3JpbWUgdGhhdCBoYXMgaGFwcGVuZWQgaW4gdGhhdCBwYXJ0aWN1bGFyIGFyZWEuDQoNCmBgYHtyfQ0KdG1hcF9tb2RlKCJ2aWV3IikNCg0KdG1fc2hhcGUobmVpZ2gpICsgDQogIHRtX3BvbHlnb25zKCJzaGFwZWFyZWEiKSArDQp0bV9zaGFwZShjcmltZSkgKyANCiAgdG1fZG90cyhjb2w9Im9mZmVuc2UiLCBwYWxldHRlID0gIlNldDEiLCBzdHJldGNoLnBhbGV0dGUgPSBGQUxTRSwgc2l6ZSA9IDAuMDIsIHNoYXBlID0gMikgKyAgDQogIHRtX2xheW91dChsZWdlbmQub3V0c2lkZSA9IFRSVUUpIA0KYGBgDQoNCiMjIyBNYWtpbmcgVmlzdWFsaXphdGlvbnMgZnJvbSB0aGUgRGF0YQ0KDQpUaGUgY3JpbWUgZGF0YSBmcm9tIE9wZW4gRGF0YSBEQyBpcyBmcm9tIEphbiAxLCAyMDIxIHRpbGwgRGVjIDgsIDIwMjEuIFdlIHVzZWQgc29tZSBvZiB0aGUgdmFyaWFibGVzIGZyb20gdGhlIGRhdGFzZXQgdG8gY3JlYXRlIHBsb3RzIHRoYXQgY291bGQgZ2l2ZSB1cyBjZXJ0YWluIHZpc3VhbGl6YXRpb25zIGFib3V0IGNyaW1lIGhhcHBlbmluZyBpbiBEQy4NCg0KIyMjIyBUaW1lIG9mIHRoZSBkYXkNCg0KVGhlIGdncGxvdCBzaG93cyB1cyB2aXN1YWxpemF0aW9ucyBmb3IgY3JpbWUgYnkgdGltZSBvZiBkYXkuIA0KDQpgYGB7cn0NCmdncGxvdChjcmltZSwgYWVzKGZjdF9pbmZyZXEoc2hpZnQpKSkgKw0KICBnZW9tX2JhcigpICsNCiAgbGFicygNCiAgICB4PSJUaW1lIG9mIERheSIsDQogICAgeT0iTnVtYmVyIG9mIENyaW1lcyBSZXBvcnRlZCIpKw0KICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpDQpgYGANCg0KIyMjIyBNZXRob2QNCg0KVGhlIGdncGxvdCBzaG93cyB1cyB2aXN1YWxpemF0aW9ucyBmb3IgY3JpbWUgYnkgbWV0aG9kLg0KDQpgYGB7cn0NCmdncGxvdChjcmltZSwgYWVzKHg9ZmN0X2luZnJlcShtZXRob2QpKSkgKw0KICBnZW9tX2JhcigpICsNCiAgbGFicygNCiAgICB4PSJNZXRob2Qgb2YgQ3JpbWUiLA0KICAgIHk9Ik51bWJlciBvZiBDcmltZXMgUmVwb3J0ZWQiLA0KICAgIGZpbGw9Ik1ldGhvZCIpICsNCiAgc2NhbGVfeV9jb250aW51b3VzKGxhYmVscyA9IHNjYWxlczo6Y29tbWEpKw0KICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpDQpgYGANCg0KIyMjIyBPZmZlbnNlDQoNCmBnZ3Bsb3RgIGNvZGUgYmVsb3cgc2hvd3MgdGhlIG51bWJlciBvZiBjcmltZXMgYnkgb2ZmZW5zZS4gDQpJbiB0aGUgcGxvdCBiZWxvdywgd2Ugc2VlIHRoYXQgdGhlcmUgYXJlIG5vIHJlY29yZHMgZm9yIEFyc29uIHJlbGF0ZWQgY3JpbWVzLiBIb3dldmVyLCB0aGF0IGlzIGJlY2F1c2UgdGhlIGNyaW1lcyByZWxhdGVkIHRvIEFyc29uIHZlcnkgbGVzcyAoMykgY29tcGFyZWQgdG8gdGhhdCBvZiBUaGVmdC9PdGhlciAoMTAyMzYpLg0KDQpgYGB7cn0NCmdncGxvdChjcmltZSwgYWVzKHg9ZmN0X2luZnJlcShvZmZlbnNlKSwgZmlsbD1vZmZlbnNlKSkgKw0KICBnZW9tX2JhcihzdGF0PSdjb3VudCcpICsNCiAgbGFicygNCiAgICB4PSJDcmltaW5hbCBPZmZlbnNlIiwNCiAgICB5PSJOdW1iZXIgb2YgQ3JpbWVzIFJlcG9ydGVkIiwNCiAgICBmaWxsPSJPZmZlbnNlIikgKw0KICAgIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gMzAsIGhqdXN0PTEpKSArDQogICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKQ0KYGBgDQoNCiMjIyMgVG90YWwgQ3JpbWVzIChieSBtb250aCkNCg0KKiBEYXRhIGZvciBEZWNlbWJlciBpcyBpbmNvbXBsZXRlLg0KDQpgYGB7cn0NCmdncGxvdChjcmltZSwgYWVzKGZhY3Rvcihtb250aChyZXBvcnRfZGF0LCBsYWJlbD1UUlVFKSkpKSArDQogIGdlb21fYmFyKCkgKw0KICBsYWJzKA0KICAgIHg9IlllYXIiLA0KICAgIHk9Ik51bWJlciBvZiBDcmltZXMgUmVwb3J0ZWQiKSArDQogICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKQ0KYGBg